๊ธ๋ก๋ฒ ๊ฐ๋ฐ์๋ฅผ ์ํ ํ๋ก ํธ์๋ ํจํค์ง ๊ด๋ฆฌ ์ข ํฉ ๊ฐ์ด๋. ์์กด์ฑ ํด๊ฒฐ ์ ๋ต๊ณผ ํต์ฌ ๋ณด์ ๊ดํ์ ์ค์ ์ ๋ก๋๋ค.
ํ๋ก ํธ์๋ ํจํค์ง ๊ด๋ฆฌ: ๊ธ๋ก๋ฒ ๊ฐ๋ฐ ํ๊ฒฝ์์์ ์์กด์ฑ ํด๊ฒฐ๊ณผ ๋ณด์ ํ์
์ค๋๋ ์ํธ ์ฐ๊ฒฐ๋ ์น ๊ฐ๋ฐ ์ธ๊ณ์์ ํ๋ก ํธ์๋ ํ๋ก์ ํธ๋ ์ฒ์๋ถํฐ ๊ตฌ์ถ๋๋ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ์์ต๋๋ค. ๋์ , ํจํค์ง ๋งค๋์ ๋ฅผ ํตํด ๊ด๋ฆฌ๋๋ ๋ฐฉ๋ํ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ ์ํ๊ณ์ ์์กดํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ค์ ์ต์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์๋ช ์ค๊ณผ ๊ฐ์์, ๋น ๋ฅธ ๋ฐ๋ณต ๊ฐ๋ฐ๊ณผ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋ํ ์ ๊ทผ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์์กด์ฑ์ ์ฃผ๋ก ์์กด์ฑ ํด๊ฒฐ๊ณผ ๋ณด์๊ณผ ๊ด๋ จ๋ ๋ณต์ก์ฑ์ ์ผ๊ธฐํฉ๋๋ค. ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์๊ฒ ์ด๋ฌํ ์ธก๋ฉด์ ์ดํดํ๋ ๊ฒ์ ๊ฒฌ๊ณ ํ๊ณ ์ ๋ขฐํ ์ ์์ผ๋ฉฐ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๊ฐ์ฅ ์ค์ํฉ๋๋ค.
๊ธฐ์ด: ํ๋ก ํธ์๋ ํจํค์ง ๊ด๋ฆฌ๋ ๋ฌด์์ธ๊ฐ?
ํต์ฌ์ ์ผ๋ก ํ๋ก ํธ์๋ ํจํค์ง ๊ด๋ฆฌ๋ ํ๋ก ํธ์๋ ํ๋ก์ ํธ๊ฐ ์์กดํ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ๋์ ์ค์น, ์ ๋ฐ์ดํธ, ๊ตฌ์ฑ ๋ฐ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์คํ ๊ณผ ๋๊ตฌ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํจํค์ง ๋งค๋์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- npm (Node Package Manager): Node.js์ ๊ธฐ๋ณธ ํจํค์ง ๋งค๋์ ๋ก, ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ ๊ฐ์ฅ ํฐ ํจํค์ง ์ ์ฅ์๋ฅผ ๋ณด์ ํ๊ณ ์์ต๋๋ค.
- Yarn: ํ์ด์ค๋ถ์ด ๊ฐ๋ฐํ Yarn์ npm์ ์ด๊ธฐ ์ฑ๋ฅ ๋ฐ ๋ณด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค. ๊ฒฐ์ ์ ์ค์น(deterministic installs) ๋ฐ ์คํ๋ผ์ธ ์บ์ฑ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- pnpm (Performant npm): ์๋ก์ด ์ฃผ์์ธ pnpm์ ์ฝํ ์ธ ์ฃผ์ ์ง์ ๊ฐ๋ฅ ์ ์ฅ์(content-addressable store)์ ์์กด์ฑ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋์คํฌ ๊ณต๊ฐ ํจ์จ์ฑ๊ณผ ๋น ๋ฅธ ์ค์น ์๊ฐ์ ์ค์ ์ ๋ก๋๋ค.
์ด๋ฌํ ๋งค๋์ ๋ค์ ์ฃผ๋ก package.json๊ณผ ๊ฐ์ ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ ์์กด์ฑ๊ณผ ์ํ๋ ๋ฒ์ ์ ๋์ดํฉ๋๋ค. ์ด ํ์ผ์ ์ฒญ์ฌ์ง ์ญํ ์ ํ์ฌ ํจํค์ง ๋งค๋์ ์๊ฒ ์ด๋ค ํจํค์ง๋ฅผ ๊ฐ์ ธ์ ์ค์นํด์ผ ํ๋์ง ์๋ ค์ค๋๋ค.
์์กด์ฑ ํด๊ฒฐ์ ๊ณผ์
์์กด์ฑ ํด๊ฒฐ์ ํจํค์ง ๋งค๋์ ๊ฐ ํ์ํ ๋ชจ๋ ํจํค์ง์ ๊ทธ ํ์ ์์กด์ฑ์ ์ ํํ ๋ฒ์ ์ ๊ฒฐ์ ํ๋ ๊ณผ์ ์ ๋๋ค. ์ด๋ ์ฌ๋ฌ ์์ธ์ผ๋ก ์ธํด ๋งค์ฐ ๋ณต์กํด์ง ์ ์์ต๋๋ค:
1. ์ ์์ ๋ฒ์ ๋ช ์(SemVer)์ ๋ฒ์ ๋ฒ์
๋๋ถ๋ถ์ ์๋ฐ์คํฌ๋ฆฝํธ ํจํค์ง๋ ๋ฒ์ ๋ฒํธ๊ฐ ์ด๋ป๊ฒ ํ ๋น๋๊ณ ์ฆ๊ฐํ๋์ง์ ๋ํ ์ฌ์์ธ ์ ์์ ๋ฒ์ ๋ช
์(SemVer)๋ฅผ ๋ฐ๋ฆ
๋๋ค. SemVer ๋ฒํธ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฃผ(MAJOR).๋ถ(MINOR).์(PATCH)(์: 1.2.3)๋ก ํ์๋ฉ๋๋ค.
- ์ฃผ(MAJOR): ํ์ ํธํ๋์ง ์๋ API ๋ณ๊ฒฝ.
- ๋ถ(MINOR): ํ์ ํธํ๋๋ ๋ฐฉ์์ผ๋ก ๊ธฐ๋ฅ ์ถ๊ฐ.
- ์(PATCH): ํ์ ํธํ๋๋ ๋ฒ๊ทธ ์์ .
package.json์์ ๊ฐ๋ฐ์๋ค์ ์
๋ฐ์ดํธ์ ๋ฒ๊ทธ ์์ ์ ํ์ฉํ๊ธฐ ์ํด ์ ํํ ๋ฒ์ ๋์ ๋ฒ์ ๋ฒ์๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ผ๋ฐ์ ์ธ ๋ฒ์ ์ง์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์บ๋ฟ (
^): ๋ช ์๋ ์ฃผ ๋ฒ์ ์ ๋ณ๊ฒฝํ์ง ์๋ ๊ฐ์ฅ ์ต์ ์ ๋ถ ๋๋ ์ ๋ฒ์ ์ผ๋ก์ ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉํฉ๋๋ค(์:^1.2.3์1.2.3๋ถํฐ2.0.0๋ฏธ๋ง๊น์ง์ ๋ฒ์ ์ ํ์ฉ). ์ด๋ npm๊ณผ Yarn์ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค. - ํธ๋ (
~): ๋ถ ๋ฒ์ ์ด ์ง์ ๋ ๊ฒฝ์ฐ ์ ๋ฒ์ ์์ค์ ๋ณ๊ฒฝ์ ํ์ฉํ๊ณ , ์ฃผ ๋ฒ์ ๋ง ์ง์ ๋ ๊ฒฝ์ฐ ๋ถ ๋ฒ์ ์์ค์ ๋ณ๊ฒฝ์ ํ์ฉํฉ๋๋ค(์:~1.2.3์1.2.3๋ถํฐ1.3.0๋ฏธ๋ง๊น์ง์ ๋ฒ์ ์ ํ์ฉ). - ์ด์(
>=) / ์ดํ(<=): ๋ช ์์ ์ผ๋ก ๋ฒ์๋ฅผ ์ ์ํฉ๋๋ค. - ์์ผ๋์นด๋ (
*): ๋ชจ๋ ๋ฒ์ ์ ํ์ฉํฉ๋๋ค(๊ฑฐ์ ๊ถ์ฅ๋์ง ์์).
๊ธ๋ก๋ฒ ์ํฅ: SemVer๋ ํ์ค์ด์ง๋ง, ๋ฒ์ ๋ฒ์์ ํด์๊ณผ ๊ตฌํ์ ํจํค์ง ๋งค๋์ ๋ง๋ค, ๋๋ ๊ตฌ์ฑ์ด ์ผ์นํ์ง ์์ ๊ฒฝ์ฐ ๋์ผํ ํจํค์ง ๋งค๋์ ์ ๋ค๋ฅธ ์ค์น ํ๊ฒฝ์์๋ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์ง์ญ์ ๊ฐ๋ฐ์๋ค์ ์ธํฐ๋ท ์๋๋ ํจํค์ง ๋ ์ง์คํธ๋ฆฌ ์ ๊ทผ์ฑ์ด ๋ค๋ฅผ ์ ์์ผ๋ฉฐ, ์ด ๋ํ ์์กด์ฑ ํด๊ฒฐ์ ์ค์ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
2. ์์กด์ฑ ํธ๋ฆฌ
ํ๋ก์ ํธ์ ์์กด์ฑ์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ์ฑํฉ๋๋ค. ํจํค์ง A๋ ํจํค์ง B์ ์์กดํ๊ณ , ํจํค์ง B๋ ๋ค์ ํจํค์ง C์ ์์กดํ ์ ์์ต๋๋ค. ํจํค์ง D ๋ํ ํจํค์ง B์ ์์กดํ ์ ์์ต๋๋ค. ํจํค์ง ๋งค๋์ ๋ ์ด ์ ์ฒด ํธ๋ฆฌ๋ฅผ ์ํํ์ฌ ๋ชจ๋ ํจํค์ง์ ํธํ ๊ฐ๋ฅํ ๋ฒ์ ์ด ์ค์น๋๋๋ก ํด์ผ ํฉ๋๋ค.
์ถฉ๋ ๋ฌธ์ : ๋ง์ฝ ํจํค์ง A๊ฐ LibraryX@^1.0.0์ ์๊ตฌํ๊ณ ํจํค์ง D๊ฐ LibraryX@^2.0.0์ ์๊ตฌํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ด๊ฒ์ด ๋ฐ๋ก ์ ํ์ ์ธ ์์กด์ฑ ์ถฉ๋์
๋๋ค. ํจํค์ง ๋งค๋์ ๋ LibraryX์ ์ด๋ค ๋ฒ์ ์ ์ค์นํ ์ง ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ์ข
์ข
ํด๊ฒฐ ์ ๋ต์ ์์กด์ฑ ํธ๋ฆฌ์ ๋ฃจํธ์ ๋ ๊ฐ๊น์ด ํจํค์ง๊ฐ ์๊ตฌํ๋ ๋ฒ์ ์ ์ฐ์ ์ํ์ง๋ง, ์ด๊ฒ์ด ํญ์ ๊ฐ๋จํ์ง๋ ์์ผ๋ฉฐ ์ ํ๋ ๋ฒ์ ์ด ๋ชจ๋ ์์กด ํญ๋ชฉ๊ณผ ์ง์ ์ผ๋ก ํธํ๋์ง ์์ ๊ฒฝ์ฐ ์๊ธฐ์น ์์ ๋์์ ์ ๋ฐํ ์ ์์ต๋๋ค.
3. ๋ฝ ํ์ผ: ๊ฒฐ์ ์ ์ค์น ๋ณด์ฅ
๋ฒ์ ๋ฒ์์ ์์ธก ๋ถ๊ฐ๋ฅ์ฑ์ ํด๊ฒฐํ๊ณ ํ์ ๋ชจ๋ ๊ฐ๋ฐ์์ ๋ชจ๋ ๋ฐฐํฌ ํ๊ฒฝ์์ ์ ํํ ๋์ผํ ์์กด์ฑ ์งํฉ์ ์ฌ์ฉํ๋๋ก ๋ณด์ฅํ๊ธฐ ์ํด, ํจํค์ง ๋งค๋์ ๋ ๋ฝ ํ์ผ(lock files)์ ์ฌ์ฉํฉ๋๋ค.
- npm:
package-lock.json์ ์ฌ์ฉํฉ๋๋ค. - Yarn:
yarn.lock์ ์ฌ์ฉํฉ๋๋ค. - pnpm:
pnpm-lock.yaml์ ์ฌ์ฉํฉ๋๋ค.
์ด ํ์ผ๋ค์ ๋ชจ๋ ์ ์ด ์์กด์ฑ(transitive dependencies)์ ํฌํจํ์ฌ node_modules ๋๋ ํ ๋ฆฌ์ ์ค์น๋ ๋ชจ๋ ๋จ์ผ ํจํค์ง์ ์ ํํ ๋ฒ์ ์ ๊ธฐ๋กํฉ๋๋ค. ๋ฝ ํ์ผ์ด ์กด์ฌํ๋ฉด, ํจํค์ง ๋งค๋์ ๋ ๋๋ถ๋ถ์ ํจํค์ง์ ๋ํด ๋ฒ์ ๋ฒ์ ํด๊ฒฐ ๋ก์ง์ ๊ฑด๋๋ฐ๊ณ ๋ฝ ํ์ผ์ ๋ช
์๋ ๋๋ก ์ ํํ๊ฒ ์์กด์ฑ์ ์ค์นํ๋ ค๊ณ ์๋ํฉ๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ๋งค์ฐ ์ค์ํฉ๋๋ค:
- ์ฌํ์ฑ: ๋ค๋ฅธ ๋จธ์ ๊ณผ ๋ค๋ฅธ ์๊ฐ์๋ ๋น๋๊ฐ ์ผ๊ด๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ํ์ : ํนํ ์ ์ธ๊ณ์ ๋ถ์ฐ๋ ํ์์ "๋ด ์ปดํจํฐ์์๋ ๋๋๋ฐ" ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ๋ณด์: ์ค์น๋ ํจํค์ง ๋ฒ์ ์ ์๋ ค์ง ๋ณด์ ๋ฒ์ ๊ณผ ๋น๊ตํ์ฌ ๋ ์ฝ๊ฒ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ๋ชจ๋ฒ ์ฌ๋ก: ํญ์ ๋ฝ ํ์ผ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ (์: Git)์ ์ปค๋ฐํ์ญ์์ค. ์ด๊ฒ์ ๊ธ๋ก๋ฒ ํ์์ ์์กด์ฑ์ ์์ ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฐ์ฅ ์ค์ํ ๋จ์ผ ๋จ๊ณ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
4. ์์กด์ฑ ์ต์ ์ํ ์ ์ง
์์กด์ฑ ํด๊ฒฐ ๊ณผ์ ์ ์ด๊ธฐ ์ค์น๋ก ๋๋์ง ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์งํํ๊ณ , ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ฉฐ, ์๋ก์ด ๊ธฐ๋ฅ์ ๋์ ํฉ๋๋ค. ์ ๊ธฐ์ ์ผ๋ก ์์กด์ฑ์ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ์ฑ๋ฅ, ๋ณด์ ๋ฐ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํ ์ ๊ทผ์ ์ํด ํ์์ ์ ๋๋ค.
- npm outdated / npm update
- Yarn outdated / Yarn upgrade
- pnpm outdated / pnpm up
๊ทธ๋ฌ๋ ์์กด์ฑ์ ์ ๋ฐ์ดํธํ๋ฉด, ํนํ ์บ๋ฟ ๋ฒ์๋ฅผ ์ฌ์ฉํ ๋, ์๋ก์ด ์์กด์ฑ ํด๊ฒฐ ๋ผ์ด๋๋ฅผ ์ ๋ฐํ๊ณ ์ ์ฌ์ ์ผ๋ก ํธํ์ฑ์ด ๊นจ์ง๋ ๋ณ๊ฒฝ์ด๋ ์ถฉ๋์ ์ผ๊ธฐํ ์ ์์ต๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ์ ์คํ ํ ์คํธ์ ์ ์ง์ ์ธ ์ ๋ฐ์ดํธ๊ฐ ์ค์ํด์ง๋๋ค.
์ค๋ํ ๊ณผ์ : ํ๋ก ํธ์๋ ํจํค์ง ๊ด๋ฆฌ์ ๋ณด์
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์คํ์์ค ํน์ฑ์ ๊ฐ์ ์ด์ง๋ง, ๋์์ ์ค๋ํ ๋ณด์ ๊ณผ์ ๋ฅผ ์ ์ํฉ๋๋ค. ์ ์์ ์ธ ํ์์๋ ์ธ๊ธฐ ์๋ ํจํค์ง๋ฅผ ์์์ํค๊ฑฐ๋, ์ ์ฑ ์ฝ๋๋ฅผ ์ฃผ์ ํ๊ฑฐ๋, ์๋ ค์ง ์ทจ์ฝ์ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
1. ์ํ ํ๊ฒฝ์ ์ดํด
ํ๋ก ํธ์๋ ํจํค์ง ๊ด๋ฆฌ์ ์ฃผ์ ๋ณด์ ์ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ ์ฑ ํจํค์ง: ๋ฐ์ดํฐ๋ฅผ ํ์น๊ฑฐ๋, ์ํธํํ๋ฅผ ์ฑ๊ตดํ๊ฑฐ๋, ์์คํ ์ ๋ฐฉํดํ๋๋ก ์๋์ ์ผ๋ก ์ค๊ณ๋ ํจํค์ง. ์ด๋ ํ์ดํฌ์ค์ฟผํ (์ธ๊ธฐ ์๋ ํจํค์ง์ ์ ์ฌํ ์ด๋ฆ์ผ๋ก ํจํค์ง๋ฅผ ๋ฑ๋ก)์ด๋ ํฉ๋ฒ์ ์ธ ํจํค์ง๋ฅผ ํ์ทจํ์ฌ ๋์ ๋ ์ ์์ต๋๋ค.
- ์ทจ์ฝํ ์์กด์ฑ: ํฉ๋ฒ์ ์ธ ํจํค์ง์ ๊ณต๊ฒฉ์๊ฐ ์ ์ฉํ ์ ์๋ ๋ณด์ ๊ฒฐํจ(CVE)์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ทจ์ฝ์ ์ ํจํค์ง ์์ฒด ๋๋ ๊ทธ ์์กด์ฑ์ ์กด์ฌํ ์ ์์ต๋๋ค.
- ๊ณต๊ธ๋ง ๊ณต๊ฒฉ: ์ด๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋์์ผ๋ก ํ๋ ๋ ๊ด๋ฒ์ํ ๊ณต๊ฒฉ์ ๋๋ค. ์ธ๊ธฐ ์๋ ํจํค์ง๋ฅผ ์์์ํค๋ฉด ์์ฒ ๋๋ ์๋ฐฑ๋ง ๊ฐ์ ํ์ ํ๋ก์ ํธ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ์์กด์ฑ ํผ๋(Dependency Confusion): ๊ณต๊ฒฉ์๊ฐ ๋ด๋ถ ํจํค์ง์ ๋์ผํ ์ด๋ฆ์ ์ ์ฑ ํจํค์ง๋ฅผ ๊ณต๊ฐ ๋ ์ง์คํธ๋ฆฌ์ ๊ฒ์ํ ์ ์์ต๋๋ค. ๋น๋ ์์คํ ์ด๋ ํจํค์ง ๋งค๋์ ๊ฐ ์๋ชป ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ, ์๋ํ ๋น๊ณต๊ฐ ๋ฒ์ ๋์ ์ ์ฑ ๊ณต๊ฐ ๋ฒ์ ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
์ํ์ ๊ธ๋ก๋ฒ ๋ฒ์: ๋๋ฆฌ ์ฌ์ฉ๋๋ ํจํค์ง์์ ๋ฐ๊ฒฌ๋ ์ทจ์ฝ์ ์ ์ฆ๊ฐ์ ์ธ ๊ธ๋ก๋ฒ ํ๊ธ ํจ๊ณผ๋ฅผ ๊ฐ์ ธ์ ์ฌ๋ฌ ๋๋ฅ์ ๊ธฐ์ ๊ณผ ๊ฐ์ธ์ด ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, SolarWinds ๊ณต๊ฒฉ์ ์ง์ ์ ์ธ ํ๋ก ํธ์๋ ํจํค์ง๋ ์๋์์ง๋ง, ๊ณต๊ธ๋ง์์ ์ ๋ขฐํ ์ ์๋ ์ํํธ์จ์ด ๊ตฌ์ฑ ์์๋ฅผ ์์์ํค๋ ๊ฒ์ด ์ผ๋ง๋ ์ฌ๊ฐํ ์ํฅ์ ๋ฏธ์น๋์ง ๋ณด์ฌ์ฃผ์์ต๋๋ค.
2. ๋ณด์์ ์ํ ๋๊ตฌ ๋ฐ ์ ๋ต
๋คํํ๋ ์ด๋ฌํ ์ํ์ ์ํํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ์ ๋ต์ด ์์ต๋๋ค:
a) ์ทจ์ฝ์ ์ค์บ
๋๋ถ๋ถ์ ํจํค์ง ๋งค๋์ ๋ ํ๋ก์ ํธ์ ์์กด์ฑ์์ ์๋ ค์ง ์ทจ์ฝ์ ์ ์ค์บํ๋ ๋ด์ฅ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค:
- npm audit: ์ค์น๋ ์์กด์ฑ์ ๋ํด ์ทจ์ฝ์ ๊ฒ์ฌ๋ฅผ ์คํํฉ๋๋ค. ๋ํ ์ฌ๊ฐ๋๊ฐ ๋ฎ์ ์ทจ์ฝ์ ์ ์๋์ผ๋ก ์์ ํ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค.
- Yarn audit: npm audit๊ณผ ์ ์ฌํ๋ฉฐ ์ทจ์ฝ์ ๋ณด๊ณ ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
- npm-check-updates (ncu) / yarn-upgrade-interactive: ์ฃผ๋ก ์ ๋ฐ์ดํธ๋ฅผ ์ํ ๋๊ตฌ์ง๋ง, ์ค๋๋ ํจํค์ง๋ฅผ ๊ฐ์กฐ ํ์ํ์ฌ ๋ณด์ ๋ถ์์ ๋์์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: CI/CD ํ์ดํ๋ผ์ธ์์ ์ ๊ธฐ์ ์ผ๋ก npm audit(๋๋ ๋ค๋ฅธ ๋งค๋์ ์ ํด๋น ๋ช
๋ น์ด)์ ์คํํ์ญ์์ค. ์น๋ช
์ ์ด๊ฑฐ๋ ์ฌ๊ฐ๋๊ฐ ๋์ ์ทจ์ฝ์ ์ ๋ฐฐํฌ๋ฅผ ์ฐจ๋จํ๋ ์์๋ก ์ทจ๊ธํ์ญ์์ค.
b) ๋ณด์ ๊ตฌ์ฑ ๋ฐ ์ ์ฑ
- npm์
.npmrc/ Yarn์.yarnrc.yml: ์ด ๊ตฌ์ฑ ํ์ผ๋ค์ ์ฌ์ฉํ๋ฉด ์๊ฒฉํ SSL์ ๊ฐ์ ํ๊ฑฐ๋ ์ ๋ขฐํ ์ ์๋ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ง์ ํ๋ ๋ฑ์ ์ ์ฑ ์ ์ค์ ํ ์ ์์ต๋๋ค. - ์ฌ์ค ๋ ์ง์คํธ๋ฆฌ: ์ํฐํ๋ผ์ด์ฆ ์์ค์ ๋ณด์์ ์ํด ์ฌ์ค ํจํค์ง ๋ ์ง์คํธ๋ฆฌ(์: npm Enterprise, Artifactory, GitHub Packages)๋ฅผ ์ฌ์ฉํ์ฌ ๋ด๋ถ ํจํค์ง๋ฅผ ํธ์คํ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ๊ณต๊ฐ ํจํค์ง๋ฅผ ๋ฏธ๋ฌ๋งํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ์ด๋ ์ ์ด์ ๊ฒฉ๋ฆฌ์ ๊ณ์ธต์ ์ถ๊ฐํฉ๋๋ค.
package-lock.json๋๋yarn.lock์๋ ์ ๋ฐ์ดํธ ๋นํ์ฑํ: ์ค์น ์ค์ ๋ฝ ํ์ผ์ ์ค์ํ์ง ์์ ๊ฒฝ์ฐ ์คํจํ๋๋ก ํจํค์ง ๋งค๋์ ๋ฅผ ๊ตฌ์ฑํ์ฌ ์๊ธฐ์น ์์ ๋ฒ์ ๋ณ๊ฒฝ์ ๋ฐฉ์งํฉ๋๋ค.
c) ๊ฐ๋ฐ์๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
- ํจํค์ง ์ถ์ฒ์ ์ฃผ์: ์ข์ ์ปค๋ฎค๋ํฐ ์ง์๊ณผ ๋ณด์ ์ธ์ ์ด๋ ฅ์ด ์๋ ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ์ ํจํค์ง๋ฅผ ์ ํธํ์ญ์์ค.
- ์์กด์ฑ ์ต์ํ: ํ๋ก์ ํธ์ ์์กด์ฑ์ด ์ ์์๋ก ๊ณต๊ฒฉ ํ๋ฉด์ด ์์์ง๋๋ค. ์ ๊ธฐ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ํจํค์ง๋ฅผ ๊ฒํ ํ๊ณ ์ ๊ฑฐํ์ญ์์ค.
- ์์กด์ฑ ๊ณ ์ (์ ์คํ๊ฒ): ๋ฝ ํ์ผ์ ํ์์ ์ด์ง๋ง, ๋๋ก๋ ํนํ ๋ฒ์ ๋ฒ์๊ฐ ๋ถ์์ ์ฑ์ด๋ ์๊ธฐ์น ์์ ์ ๋ฐ์ดํธ๋ฅผ ์ ๋ฐํ๋ ๊ฒฝ์ฐ, ์ ๊ฒ์ฆ๋ ํน์ ๋ฒ์ ์ ์ค์ ์์กด์ฑ์ ๊ณ ์ ํ๋ ๊ฒ์ด ์ถ๊ฐ์ ์ธ ๋ณด์ฆ ๊ณ์ธต์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ์์กด์ฑ ์ฒด์ธ ์ดํด: ์์กด์ฑ ํธ๋ฆฌ๋ฅผ ์๊ฐํํ๋ ๋ฐ ๋์์ด ๋๋ ๋๊ตฌ(์:
npm ls,yarn list)๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๋ก ๋ฌด์์ ์ค์นํ๊ณ ์๋์ง ์ดํดํ์ญ์์ค. - ์ ๊ธฐ์ ์ธ ์์กด์ฑ ์ ๋ฐ์ดํธ: ์์ ์ธ๊ธํ๋ฏ์ด, ํจ์น ๋ฐ ๋ง์ด๋ ๋ฆด๋ฆฌ์ค๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ ์๋ ค์ง ์ทจ์ฝ์ ์ ํจ์นํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ด ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๋, ํญ์ ๊ฐ๋ ฅํ ํ ์คํธ๋ฅผ ๋ณํํ์ญ์์ค.
- CI/CD์์
npm ci๋๋yarn install --frozen-lockfile์ฌ์ฉ: ์ด ๋ช ๋ น์ด๋ค์ ์ค์น๊ฐ ๋ฝ ํ์ผ์ ์๊ฒฉํ๊ฒ ์ค์ํ๋๋ก ๋ณด์ฅํ์ฌ, ๋๊ตฐ๊ฐ ๋ก์ปฌ์ ์ฝ๊ฐ ๋ค๋ฅธ ๋ฒ์ ์ ์ค์นํ์ ๋ ๋ฐ์ํ ์ ์๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
3. ๊ณ ๊ธ ๋ณด์ ๊ณ ๋ ค ์ฌํญ
์๊ฒฉํ ๋ณด์ ์๊ตฌ ์ฌํญ์ด ์๊ฑฐ๋ ๊ท์ ๊ฐ ์ฌํ ์ฐ์ ์์ ์ด์๋๋ ์กฐ์ง์ ๊ฒฝ์ฐ ๋ค์์ ๊ณ ๋ คํ์ญ์์ค:
- ์ํํธ์จ์ด ์์ฌ ๋ช ์ธ์(SBOM): ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ์ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ๊ทธ ๋ฒ์ ์ ๋์ดํ๋ SBOM์ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ๋ง์ ๋ถ๋ฌธ์์ ๊ท์ ์๊ตฌ ์ฌํญ์ด ๋๊ณ ์์ต๋๋ค.
- ์ ์ ๋ถ์ ๋ณด์ ํ ์คํธ(SAST) ๋ฐ ๋์ ๋ถ์ ๋ณด์ ํ ์คํธ(DAST): ์ด๋ฌํ ๋๊ตฌ๋ฅผ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ํตํฉํ์ฌ ์์ฒด ์ฝ๋์ ์์กด์ฑ ์ฝ๋์ ์ทจ์ฝ์ ์ ์๋ณํ์ญ์์ค.
- ์์กด์ฑ ๋ฐฉํ๋ฒฝ: ์น๋ช ์ ์ธ ์ทจ์ฝ์ ์ด ์๋ ๊ฒ์ผ๋ก ์๋ ค์ง๊ฑฐ๋ ์กฐ์ง์ ๋ณด์ ํ์ค์ ์ถฉ์กฑํ์ง ๋ชปํ๋ ํจํค์ง์ ์ค์น๋ฅผ ์๋์ผ๋ก ์ฐจ๋จํ๋ ์ ์ฑ ์ ๊ตฌํํ์ญ์์ค.
๊ธ๋ก๋ฒ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ: ๊ตญ๊ฒฝ์ ์ด์ํ ์ผ๊ด์ฑ
๋ค๋ฅธ ๋๋ฅ์ ๊ฑธ์ณ ์์ ํ๋ ๋ถ์ฐ๋ ํ์ ๊ฒฝ์ฐ, ํจํค์ง ๊ด๋ฆฌ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- ์ค์ ์ง์ค์ ๊ตฌ์ฑ: ๋ชจ๋ ํ์์ด ๋์ผํ ํจํค์ง ๋งค๋์ ๋ฒ์ ๊ณผ ๊ตฌ์ฑ ์ค์ ์ ์ฌ์ฉํ๋๋ก ํ์ญ์์ค. ์ด๋ฅผ ๋ช ํํ๊ฒ ๋ฌธ์ํํ์ญ์์ค.
- ํ์คํ๋ ๋น๋ ํ๊ฒฝ: ์ปจํ ์ด๋ํ(์: Docker)๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์์ ๋ก์ปฌ ๋จธ์ ์ด๋ ์ด์ ์ฒด์ ์ ๊ด๊ณ์์ด ๋ชจ๋ ์์กด์ฑ๊ณผ ๋๊ตฌ๋ฅผ ์บก์ํํ๋ ์ผ๊ด๋ ๋น๋ ํ๊ฒฝ์ ๋ง๋์ญ์์ค.
- ์๋ํ๋ ์์กด์ฑ ๊ฐ์ฌ:
npm audit๋๋ ์ด์ ์์ํ๋ ๊ฒ์ CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉํ์ฌ ์ทจ์ฝ์ ์ด ํ๋ก๋์ ์ ๋๋ฌํ๊ธฐ ์ ์ ์ก์๋ด์ญ์์ค. - ๋ช ํํ ์ปค๋ฎค๋์ผ์ด์ ์ฑ๋: ์์กด์ฑ ์ ๋ฐ์ดํธ, ์ ์ฌ์ ์ถฉ๋ ๋ฐ ๋ณด์ ๊ถ๊ณ ์ ๋ํด ๋ ผ์ํ๊ธฐ ์ํ ๋ช ํํ ์ปค๋ฎค๋์ผ์ด์ ํ๋กํ ์ฝ์ ์๋ฆฝํ์ญ์์ค.
๊ฒฐ๋ก
ํ๋ก ํธ์๋ ํจํค์ง ๊ด๋ฆฌ๋ ํ๋ ์น ๊ฐ๋ฐ์ ๋ณต์กํ์ง๋ง ํ์์ ์ธ ์ธก๋ฉด์ ๋๋ค. ๋ฝ ํ์ผ๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ํตํด ์์กด์ฑ ํด๊ฒฐ์ ๋ง์คํฐํ๋ ๊ฒ์ ์์ ์ ์ด๊ณ ์ฌํ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ๋์์, ์ทจ์ฝ์ ์ค์บ, ๋ณด์ ๊ตฌ์ฑ ๋ฐ ๊ฐ๋ฐ์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํ์ฉํ๋ ์ ์ ์ ์ธ ๋ณด์ ์ ๊ทผ ๋ฐฉ์์ ์งํํ๋ ์ํ์ผ๋ก๋ถํฐ ํ๋ก์ ํธ์ ์ฌ์ฉ์๋ฅผ ๋ณดํธํ๋ ๋ฐ ์์ด ํํํ ์ ์๋ ๋ถ๋ถ์ ๋๋ค.
๋ฒ์ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ, ๋ฝ ํ์ผ์ ์ค์์ฑ, ๊ทธ๋ฆฌ๊ณ ์์กดํ๋ ๋ณด์ ์ํ์ ์ดํดํจ์ผ๋ก์จ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ ๋ ํ๋ ฅ์ ์ด๊ณ ์์ ํ๋ฉฐ ํจ์จ์ ์ธ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์์น์ ์์ฉํ๋ฉด ๊ธ๋ก๋ฒ ํ์ด ํจ๊ณผ์ ์ผ๋ก ํ์ ํ๊ณ ์ ์ ๋ ์ํธ ์ฐ๊ฒฐ๋๋ ๋์งํธ ํ๊ฒฝ์์ ๊ณ ํ์ง ์ํํธ์จ์ด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.